package com.hzlj.position.job.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fz.common.base.converter.RemoveWrapperPlus;
import com.fz.common.base.dto.DeleteCommonDTO;
import com.hzlj.position.job.common.model.NoticeJob;
import com.hzlj.position.job.mapper.NoticeJobMapper;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * 通知任务配置(NoticeJob)表操作类
 *
 * @author makejava
 * @date 2024-09-09 11:52:37
 */
@Repository
public class NoticeJobDao extends ServiceImpl<NoticeJobMapper, NoticeJob> {
    @Resource
    private NoticeJobMapper noticeJobMapper;


    /**
     * 修改数据
     */
    public boolean updateNoticeJob(NoticeJob dto) {
        LambdaQueryWrapper<NoticeJob> queryWrapper = new QueryWrapper<NoticeJob>().lambda()
                .eq(NoticeJob::getId, dto.getId());
        return this.update(dto, queryWrapper);
    }

    /**
     * 删除数据
     */
    public boolean deleteNoticeJob(DeleteCommonDTO<String> dto) {
        return RemoveWrapperPlus.remove(this, dto);
    }

    /**
     * 查询列表：不分页
     */
    public List<NoticeJob> listNoticeJob() {
        LambdaQueryWrapper<NoticeJob> query = new QueryWrapper<NoticeJob>()
                .lambda()
                .eq(NoticeJob::getScheduleStatus, false)
                .lt(NoticeJob::getNextExeTime, new Date())
                .orderByDesc(NoticeJob::getJgCode);
        return this.list(query);
    }


    public void beginSchedule(List<Long> ids) {
        LambdaUpdateWrapper<NoticeJob> update = new UpdateWrapper<NoticeJob>()
                .lambda()
                .set(NoticeJob::getScheduleStatus, true)
                .in(NoticeJob::getId, ids);
        this.update(update);
    }

    public void endSchedule(Long id, Date nextExeTime) {
        LambdaUpdateWrapper<NoticeJob> update = new UpdateWrapper<NoticeJob>()
                .lambda()
                .set(NoticeJob::getScheduleStatus, false)
                .set(NoticeJob::getLastExeTime, new Date())
                .set(NoticeJob::getNextExeTime, nextExeTime)
                .eq(NoticeJob::getId, id);
        this.update(update);
    }
}

